
//路线按钮
function RouteButton(){
  document.addEventListener('DOMContentLoaded', function() {
      const sendButton = document.querySelector('.fasong');
      const deleteButton = document.querySelector('.shanchu');
      const buttons = document.querySelectorAll('.route-btn');
      let isActive = false;
      let isDeleteMode = false; // 新增删除模式状态
      
      sendButton.addEventListener('click', function() {
          // 切换发送按钮状态
          if (this.textContent === '发送路线') {
              this.textContent = '✓';
              this.classList.add('active');
              isActive = true;
              isDeleteMode = false; // 退出删除模式
              deleteButton.textContent = '删除路线';
              deleteButton.classList.remove('active');
              
              buttons.forEach(btn => {
                  btn.style.border = '3px solid #2ecc71';
                  btn.style.borderRadius = '8px';
              });
          } else {
              this.textContent = '发送路线';
              this.classList.remove('active');
              isActive = false;
              buttons.forEach(btn => {
                  btn.style.border = 'none';
              });
          }
      });

      deleteButton.addEventListener('click', function() {
        // 切换删除按钮状态
        if (this.textContent === '删除路线') {
            this.textContent = '✓';
            this.classList.add('active');
            isDeleteMode = true; // 进入删除模式
            isActive = false; // 退出发送模式
            sendButton.textContent = '发送路线';
            sendButton.classList.remove('active');
            
            buttons.forEach(btn => {
                btn.style.border = '3px solid #e74c3c';
                btn.style.borderRadius = '8px';
            });
        } else {
            this.textContent = '删除路线';
            this.classList.remove('active');
            isDeleteMode = false;
            buttons.forEach(btn => {
                btn.style.border = 'none';
            });
        }
    });

      // 添加路线按钮点击事件
      document.querySelector('.kuang06').addEventListener('click', e => {
          if (e.target.classList.contains('route-btn')) {
              const routeId = e.target.dataset.routeId;
              const pathData = routes[routeId];
              
              if (isDeleteMode) {
                  // 删除模式：移除路线按钮
                  e.target.remove();
                  delete routes[routeId]; // 从routes对象中删除
                  console.log(`路线${routeId}已被删除`);
                  return;
              }
              
              if (isActive) {
                console.log(pathData);
                  // 发送模式：发送路线经纬度并移除边框
                  e.target.style.border = 'none';                
                  // 获取路线
                  if (pathData && pathData.length > 0) {
                      // 发送经纬度数组
                      post_Route(pathData);
                  } else {
                      console.error('路线数据为空或无效');
                  }
              }
              
              // 绘制路线到地图
              updateMapPolyline(pathData, {
                  strokeColor: "#FF0000",
                  strokeWeight: 3,
                  strokeStyle: "solid",
                  strokeOpacity: 0.8
              });
          }
      });
  });
}

//输入框添加新路线
function addRoute(){
  document.addEventListener('DOMContentLoaded', function() {
      const input1 = document.querySelector('.shuru[placeholder="经纬度轴"]');
      const input2 = document.querySelector('.shuru[placeholder="路线名"]');          
      
      // 取消高亮
      function removeHighlight() {
          input1.style.border = '';
          input1.style.boxShadow = '';
          input2.style.border = '';
          input2.style.boxShadow = '';
      }
      
      // 格式化数字到小数点后6位
      function formatToSixDecimals(num) {
          return parseFloat(num.toFixed(6));
      }
      
      // 验证经纬度范围
      function isValidCoordinate(lng, lat) {
          return lng >= -180 && lng <= 180 && lat >= -90 && lat <= 90;
      }
      
      // 解析经纬度字符串为数组（精度到小数点后6位）
      function parseCoordinates(coordsString) {
          try {
              let points = [];
              
              // 移除括号和空格
              const cleaned = coordsString.replace(/[\[\]\(\)]/g, '').trim();
              
              // 分割点（支持空格、分号、换行符分隔）
              const pointStrings = cleaned.split(/\s+|\;|\n/).filter(str => str.trim() !== '');
              
              // 解析每个点
              points = pointStrings.map(pointStr => {
                  const [lngStr, latStr] = pointStr.split(',');
                  
                  // 检查格式
                  if (!lngStr || !latStr) {
                      throw new Error('经纬度格式错误，请使用"经度,纬度"格式');
                  }
                  
                  // 解析为数字
                  const lng = parseFloat(lngStr.trim());
                  const lat = parseFloat(latStr.trim());
                  
                  if (isNaN(lng) || isNaN(lat)) {
                      throw new Error('包含非数字字符');
                  }
                  
                  // 验证经纬度范围
                  if (!isValidCoordinate(lng, lat)) {
                      throw new Error(`经纬度超出有效范围: 经度${lng}, 纬度${lat}`);
                  }
                  
                  // 格式化到小数点后6位
                  const formattedLng = formatToSixDecimals(lng);
                  const formattedLat = formatToSixDecimals(lat);
                  
                  return [formattedLng, formattedLat];
              });
              
              return points;
          } catch (error) {
              console.error('解析经纬度失败:', error);
              alert(error.message);
              return [];
          }
      }
      
      // 保存数据并调用addNewRoute
      function saveData() {
          const coordinates = input1.value.trim();
          const routeName = input2.value.trim();
          
          if (!coordinates) {
              alert('请输入经纬度！');
              input1.focus();
              return;
          }
          
          if (!routeName) {
              alert('请输入路线名！');
              input2.focus();
              return;
          }
          
          // 解析经纬度字符串为数组格式
          const pathData = parseCoordinates(coordinates);
          
          if (pathData.length === 0) {
              alert('经纬度格式不正确！请使用格式: "经度,纬度 经度,纬度"');
              input1.focus();
              return;
          }
          
          // 显示精度信息
          console.log(`路线包含${pathData.length}个点，精度为小数点后6位`);
          pathData.forEach((point, index) => {
              console.log(`点${index + 1}: 经度=${point[0]}, 纬度=${point[1]}`);
          });
          
          // 调用addNewRoute函数
          addNewRoute(routeName, pathData);
                                        
          // 清空输入框并取消高亮
          input1.value = '';
          input2.value = '';
          removeHighlight();         
      }      
      
      // Enter键监听
      input1.addEventListener('keypress', e => e.key === 'Enter' && input2.focus());
      input2.addEventListener('keypress', e => e.key === 'Enter' && saveData());
      
      // 输入框失去焦点时验证输入（可选）
      input1.addEventListener('blur', function() {
          const value = this.value.trim();
          if (value) {
              const testData = parseCoordinates(value);
              if (testData.length > 0) {
                  this.style.border = '2px solid #2ecc71';
              } else {
                  this.style.border = '2px solid #e74c3c';
              }
          }
      });
  });
}

// 后期添加新路线数据
function addNewRoute(routeId, pathData) {
  // 1. 添加到routes对象
  routes[routeId] = pathData;
  
  // 2. 创建对应的按钮
  const btn = document.createElement('button');
  btn.className = 'route-btn';
  btn.textContent = `路线${routeId}`;
  btn.dataset.routeId = routeId;
  
  // 3. 添加到按钮容器
  document.querySelector('.kuang06').appendChild(btn);
  
  console.log(`已添加路线${routeId}:`, pathData);
}

//地图
class MapManager {
  constructor(containerId = 'map', options = {}) {
    this.containerId = containerId;
    this.defaultOptions = {
      viewMode: '2D',
      zoom: 13,
      center: center,
      ...options
    };
    this.map = null;
    this.markers = [];
    this.polylines = []; // 新增：存储折线对象
    this.currentContainer = containerId;
    this.coordPopup = null;
  }

  init() {
    try {
      this.map = new AMap.Map(this.currentContainer, this.defaultOptions);
      this.map.addControl(new AMap.MapType());
      console.log("地图初始化成功");
      return this;
    } catch (error) {
      console.error("地图初始化失败:", error);
      return this;
    }
  }

  // 切换地图容器
  toggleMapContainer(newContainerId) {
    if (this.currentContainer === newContainerId) return;
    
    // 确保新容器存在
    if (!document.getElementById(newContainerId)) {
      console.error(`地图容器 ${newContainerId} 不存在`);
      return;
    }
    
    // 保存当前地图状态
    const center = this.map.getCenter();
    const zoom = this.map.getZoom();
    
    // 销毁旧地图
    this.map.destroy();
    
    // 创建新地图
    this.currentContainer = newContainerId;
    this.map = new AMap.Map(this.currentContainer, {
      ...this.defaultOptions,
      center: [center.getLng(), center.getLat()],
      zoom: zoom
    });
    this.map.addControl(new AMap.MapType());
    
    // 重新添加标记
    if (this.markers.length > 0) {
      this.map.add(this.markers);
    }
    
    // 重新添加折线
    if (this.polylines.length > 0) {
      this.map.add(this.polylines);
    }
    
    console.log(`地图已切换到容器: ${newContainerId}`);
  }

  // 清除所有标记
  clearMarkers() {
    if (this.markers.length > 0) {
      this.map.remove(this.markers);
      this.markers = [];
    }
  }
  
  // 新增：清除所有折线
  clearPolylines() {
    if (this.polylines.length > 0) {
      this.map.remove(this.polylines);
      this.polylines = [];
    }
  }

  // 显示右下角经纬度信息
  showCoordinatesAtBottomRight(lng, lat) {
    // 移除已有的信息框
    this.removeCoordinatesPopup();
    
    // 格式化经纬度
    const formattedLng = lng.toFixed(6);
    const formattedLat = lat.toFixed(6);
    
    // 创建信息框元素
    this.coordPopup = document.createElement('div');
    this.coordPopup.className = 'map-coordinates-popup';
    this.coordPopup.innerHTML = `经度: ${formattedLng}, 纬度: ${formattedLat}`;
    
    // 添加到地图容器
    const mapContainer = document.getElementById(this.currentContainer);
    mapContainer.appendChild(this.coordPopup);
  }
  
  // 移除经纬度信息框
  removeCoordinatesPopup() {
    if (this.coordPopup && this.coordPopup.parentNode) {
      this.coordPopup.parentNode.removeChild(this.coordPopup);
      this.coordPopup = null;
    }
  }

  // 添加标记
  addMarkers(positions) {
    this.clearMarkers();
    
    // 默认图标
    const defaultIcon = new AMap.Icon({
      image: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',
      size: new AMap.Size(25, 34),
      imageSize: new AMap.Size(25, 34)
    });
    
    const iconMap = {
      type1: new AMap.Icon({
        image: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png',
        size: new AMap.Size(25, 34),
        imageSize: new AMap.Size(25, 34)
      }),
      type2: new AMap.Icon({
        image: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-blue.png',
        size: new AMap.Size(25, 34),
        imageSize: new AMap.Size(25, 34)
      })
    };

    const manager = this; // 保存当前MapManager实例的引用

    positions.forEach(point => {
      const icon = point.type && iconMap[point.type] ? iconMap[point.type] : defaultIcon;
      
      const marker = new AMap.Marker({
        position: point.lnglat,
        icon: icon,
        offset: new AMap.Pixel(-12.5, -34),
      });

      // 主信息窗口（显示标题）
      let infoWindow = null;
      if (point.message) {
        infoWindow = new AMap.InfoWindow({
          isCustom: true,
          autoMove: false,
          offset: new AMap.Pixel(0, -40),
          content: `<div class="information01">${point.message}</div>`
        });
      }

      // 鼠标事件
      marker.on('mouseover', () => {
        if (infoWindow) {
          infoWindow.open(manager.map, marker.getPosition());
        }
        
        // 在地图右下角显示经纬度
        const position = marker.getPosition();
        manager.showCoordinatesAtBottomRight(position.getLng(), position.getLat());
      });
      
      marker.on('mouseout', () => {
        if (infoWindow) {
          infoWindow.close();
        }
        
        // 移除右下角经纬度显示
        manager.removeCoordinatesPopup();
      });

      manager.map.add(marker);
      manager.markers.push(marker);
    });
    
    console.log(`添加了 ${positions.length} 个标记`);
  }

  // 平滑改变中心点
  smoothChangeCenter(newLng, newLat) {
    this.map.panTo([newLng, newLat]);
    console.log(`地图中心点已调整到: ${newLng}, ${newLat}`);
  }

  // 从位置数组设置标记
  setMarkersFromPositions(positionsArray) {
    if (!positionsArray || !Array.isArray(positionsArray)) {
      console.warn("无效的位置数据");
      return;
    }
    
    const formattedMarkers = positionsArray.map(item => ({
      lnglat: new AMap.LngLat(item.Lng, item.Lat),
      message: item.title || "未命名位置",
      type: item.type || "default"
    }));
    
    this.addMarkers(formattedMarkers);
  }
  
  // 新增：绘制折线
  drawPolyline(path, options = {}) {
    // 清除之前的折线
    this.clearPolylines();
    
    // 默认样式
    const defaultOptions = {
      strokeColor: "#3366FF",   // 线颜色
      strokeWeight: 5,          // 线宽
      strokeStyle: "solid",     // 线样式
      // 可以添加其他折线样式
    };
    
    // 合并选项
    const polylineOptions = {
      ...defaultOptions,
      ...options,
      path: path,  // 路径
      map: this.map
    };
    
    // 创建折线
    const polyline = new AMap.Polyline(polylineOptions);
    
    // 存储折线对象
    this.polylines.push(polyline);
    
    // 自动调整视野
    this.map.setFitView([polyline]);
    
    return polyline;
  }
}
// 导出模块
if (typeof module !== 'undefined' && module.exports) {
  module.exports = MapManager;
} else {
  window.MapManager = MapManager;
}

